2016-03-23 6 views
1

Ich bin in den frühen Phasen des Versuchs, ein Java 2D-Grafik-Malprogramm zu erstellen. Ich verwende ein Flow-Layout und verwende drei Panels. Die ersten beiden sind Reihen von Knöpfen, Kombinationsfeldern usw. und die dritte ist ein großes, weißes, leeres Feld, das zum Malen verwendet wird. Die ersten beiden Panels erscheinen wunderschön, aber die Farbpalette erscheint als kleine weiße Box neben der zweiten Schaltfläche. Jede Hilfe wäre willkommen.JPanel erscheint als eine kleine weiße Box

public class DrawingApp extends JFrame 
{ 
    private final topButtonPanel topPanel = new topButtonPanel(); 
    private final bottomButtonPanel bottomPanel = new bottomButtonPanel(); 
    private final PaintPanel paintPanel = new PaintPanel(); 

    public DrawingApp() 
    { 
     super("Java 2D Drawings"); 
     setLayout(new FlowLayout()); 
     add(topPanel); 
     add(bottomPanel); 
     add(paintPanel); 
    } 

    public static void main(String[] args) 
    { 
     DrawingApp frame = new DrawingApp(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(750,500); 
     frame.setVisible(true); 
    } 
} 

public class topButtonPanel extends JPanel 
{ 

    private final String[] names = {"Line", "Oval", "Rectangle"}; 

    private final JButton undo = new JButton("Undo"); 
    private final JButton clear = new JButton("Clear"); 
    private final JLabel shape = new JLabel("Shape:"); 
    private final JComboBox<String> shapesComboBox = new JComboBox(names); 
    private final JCheckBox filled = new JCheckBox("Filled"); 

    public topButtonPanel() 
    { 
     super(); 
     setLayout(new FlowLayout()); 
     add(undo); 
     add(clear); 
     add(shape); 
     shapesComboBox.setMaximumRowCount(3); 
     add(shapesComboBox); 
     add(filled); 
    } 
} 


public class bottomButtonPanel extends JPanel 
{ 

    private final JCheckBox useGradient = new JCheckBox("Use Gradient"); 
    private final JButton firstColor = new JButton("1st Color"); 
    private final JButton secondColor = new JButton("2nd Color"); 
    private final JLabel lineWidthLabel = new JLabel("Line Width:"); 
    private final JLabel dashLengthLabel = new JLabel("Dash Length:"); 
    private final JTextField lineWidthField = new JTextField(2); 
    private final JTextField dashLengthField = new JTextField(2); 
    private final JCheckBox filled = new JCheckBox("Dashed"); 

    public bottomButtonPanel() 
    { 
     super(); 
     setLayout(new FlowLayout()); 
     add(useGradient); 
     add(firstColor); 
     add(secondColor); 
     add(lineWidthLabel); 
     add(lineWidthField); 
     add(dashLengthLabel); 
     add(dashLengthField); 
     add(filled); 
    } 
} 

public class PaintPanel extends JPanel 
{ 

    public PaintPanel() 
    { 
     super(); 
     setBackground(Color.WHITE); 
     setSize(700,400); 
    } 
} 
+0

'public class topButtonPanel JPanel' erstreckt Bitte gemeinsame Java-Nomenklatur lernen (Benennung conve ntionen - z.B. 'EachWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', es sei denn, es handelt sich um ein 'UPPER_CASE_CONSTANT' und benutze es konsistent. Stellen Sie jedoch fest, dass es keinen Grund gibt, JPanel zu erweitern, da sich keine Funktionalität ändert - verwenden Sie einfach eine Instanz von eins. –

Antwort

1

Grundsätzlich ist es ein Missverständnis, wie die Swing-API funktioniert.

Schaukel setzt (stark) auf dem Layout-Management-API, die verwendet wird, Entscheidungen darüber zu treffen, wie groß Komponenten sein sollten (und wo sie platziert werden sollen)

Mit setSize sinnlos ist, wie der Layout-Manager macht es eigene Entscheidungen darüber, wie groß die Komponente Ihrer Meinung nach sein sollte und wird sie entsprechend anpassen.

Sie können Vorschläge an den Layout-Manager darüber, wie groß die Komponente getPreferred/Minimum/MaximumSize zu verwenden möchten, zum Beispiel

public class PaintPanel extends JPanel 
{ 

    public PaintPanel() 
    { 
     super(); 
     setBackground(Color.WHITE); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(700, 400); 
    } 
} 

Denken Sie daran, Layout-Manager sind gut in ihrem Recht, diese Werte zu ignorieren, so brauchen Sie ein besseres Verständnis davon, wie diese Manager arbeiten

Laying Out Components Within a Container weitere Details finden

Verwandte Themen