2016-12-05 3 views
0

imageJTableが表示されません。どうすれば修正できますか? Iは、上記(リンク)を取り付けた画像に

、JTableのは後方、前方の下に表示されることになって、JTableのヘッダとボタンを削除される:X/Y /幅/高さ

をしかし、それはない。誰でも助けてくれますか?私はここで間違って何をしていますか?

import java.awt.BorderLayout; 
import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.DefaultTableModel; 

public class Whiteboard extends JFrame { 
    public static void main(String[] args) { 
     new Whiteboard(); 
    } 

    private static final long serialVersionUID = 1L; 
    private String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 

    public Whiteboard() { 
     JButton setColor = new JButton("Color"); 
     JPanel colorPanel = new JPanel(); 
     colorPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     colorPanel.setLayout(new BoxLayout(colorPanel, BoxLayout.X_AXIS)); 
     colorPanel.add(setColor); 

     JButton addRect = new JButton("Rect"); 
     JButton addOval = new JButton("Oval"); 
     JButton addLine = new JButton("Line"); 
     JButton addText = new JButton("Text"); 
     JPanel addPanel = new JPanel(); 
     addPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     addPanel.setLayout(new BoxLayout(addPanel, BoxLayout.X_AXIS)); 
     addPanel.add(addRect); 
     addPanel.add(addOval); 
     addPanel.add(addLine); 
     addPanel.add(addText); 

     JTextField setText = new JTextField(""); 
     JComboBox<String> changeFont = new JComboBox<String>(petStrings); 
     JPanel textPanel = new JPanel(); 
     textPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     textPanel.setLayout(new BoxLayout(textPanel, BoxLayout.X_AXIS)); 
     textPanel.add(setText); 
     textPanel.add(changeFont); 

     JButton sendForward = new JButton("Forward"); 
     JButton sendBackward = new JButton("Backward"); 
     JButton removeObj = new JButton("Remove"); 
     JPanel orderPanel = new JPanel(); 
     orderPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     orderPanel.setLayout(new BoxLayout(orderPanel, BoxLayout.X_AXIS)); 
     orderPanel.add(sendForward); 
     orderPanel.add(sendBackward); 
     orderPanel.add(removeObj); 

     DefaultTableModel tableModel = new DefaultTableModel(new String[] { "X", "Y", "Width", "Height" }, 0); 
     JTable infoTable = new JTable(tableModel); 
     JScrollPane tablePanel = new JScrollPane(); 
     infoTable.setPreferredScrollableViewportSize(infoTable.getPreferredSize()); 
     infoTable.setFillsViewportHeight(true); 
     tablePanel.add(infoTable); 
     tableModel.addRow(new String[] { "TEST1", "TEST2", "TEST3", "TEST4" }); 

     JPanel control = new JPanel(); 
     control.setLayout(new BoxLayout(control, BoxLayout.Y_AXIS)); 
     control.add(colorPanel); 
     control.add(addPanel); 
     control.add(textPanel); 
     control.add(orderPanel); 
     control.add(tablePanel); 

     Canvas canvas = new Canvas(); 
     canvas.setLayout(new BoxLayout(canvas, BoxLayout.PAGE_AXIS)); 

     JPanel window = new JPanel(); 
     window.add(control); 
     window.add(canvas); 

     getContentPane().add(window); 
     pack(); 
     setLocationRelativeTo(null); 
     setTitle("Whiteboard"); 
     setLayout(new BorderLayout()); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+1

恐らくこれを[mcve]に減らすことができます。 – khelwood

答えて

3
tablePanel.add(infoTable); 

JScrollPaneに直接コンポーネントを追加しないでください。コンポーネントは、スクロールパネルのJViewportに追加する必要があります。

代わりに使用することができます。また

JScrollPane tablePanel = new JScrollPane(infoTable); // easiest way, 

または

tablePanel.getViewport().setViewportView(infoTable); 

Canvasクラスを使用しないでください。それはAWTコンポーネントです。 JPanelを使用する必要があります。

+0

だから、私は行全体を削除する必要がありますtablePanel.add(infoTable);かっこ内のinfoTableを削除するだけですか?私はすでにJScrollPane tablePanel = new JScrollpane();を持っているので、括弧内にinfoTableを追加するだけでいいですか? – trueno

+0

また、Canvasクラスを使用しないとどういう意味ですか?そのために何かを削除したり変更したりする必要がありますか? – trueno

+0

@trueno、なぜそれを最初に試してみませんか?何かを試してみて、1分で自分の質問に答えることができたら、なぜ答えるのに1時間以上待つのですか?あなたの2つのコメントに対する答えは、1)あなたはそれを試しましたか? 2)JPanelを使用します。 – camickr

関連する問題