问题是在BorderLayout的东部JPanel上显示一个图形三角形

时间:2014-11-23 22:44:32

标签: java swing user-interface layout-manager

我使用swing在中心制作了BorderLayoutGridLayout的GUI。我想在我JPanel的{​​{1}}以东添加一个我在另一个班级制作的三角形,但是不能让它显示出去。

当我为BorderLayout设置bgcolor时,我得到了一个奇怪的小结果,如果您愿意,可以查看代码:gistlink

我觉得问题出现在JPanel构造函数中,但我不确定如何进一步测试。我尝试了TriGoButton的不同版本但却从未见过绿色三角形。


paint()

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

@SuppressWarnings("serial")
public class TestGUI extends JFrame implements ActionListener {

    private JPanel content;
    private JTextField placeTxtField;

    public static void main(String[] args) {
        TestGUI frame = new TestGUI();
        frame.pack();
        frame.setVisible(true);
    }

    @SuppressWarnings("rawtypes")
    public TestGUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        content = new JPanel();
        content.setLayout(new BorderLayout());
        setContentPane(content);

                // issue
        JPanel rightPanel = new JPanel();
        content.add(rightPanel, BorderLayout.EAST);
        rightPanel.add(new TriGoButton());
                // issue?

        JPanel leftPanel = new JPanel();
        content.add(leftPanel, BorderLayout.WEST);

        JPanel centerPanel = new JPanel();
        content.add(centerPanel, BorderLayout.CENTER);
        centerPanel.setLayout(new GridLayout(3, 3, 0, 20));

        JLabel countyLbl = new JLabel("County");
        centerPanel.add(countyLbl);

        JComboBox countyDropDown = new JComboBox();
        centerPanel.add(countyDropDown);

        JLabel muniLbl = new JLabel("Munipalicity");
        centerPanel.add(muniLbl);

        JComboBox muniDropDown = new JComboBox();
        centerPanel.add(muniDropDown);

        JLabel placeLbl = new JLabel("City or place");
        placeLbl.setToolTipText("search");
        centerPanel.add(placeLbl);

        placeTxtField = new JTextField();
        centerPanel.add(placeTxtField);
        placeTxtField.setColumns(15);
        placeTxtField.setToolTipText("enter w/e");

        JPanel bottomPanel = new JPanel();
        content.add(bottomPanel, BorderLayout.SOUTH);

        JButton goBtn = new JButton("Clicky");
        bottomPanel.add(goBtn);
        goBtn.setToolTipText("Please click.");
        goBtn.addActionListener(this);

        JPanel topPanel = new JPanel();
        content.add(topPanel, BorderLayout.NORTH);

        JLabel headlineLbl = new JLabel("headline");
        topPanel.add(headlineLbl);

    }

    @Override
    public void actionPerformed(ActionEvent e) {


    }

}

编辑: ////////////

2 个答案:

答案 0 :(得分:3)

  1. 我不知道您为JPanel课程添加TriGoButton的原因,但这会给您带来问题。
  2. 我们不建议您覆盖paint,这可能会导致问题无法解决,因为父级容器在绘制子项时不会始终包含在更新中。有关详细信息,请参阅Painting in AWT and SwingPerforming Custom Painting
  3. BorderLayout将使用该组件preferredSize来制定有关应如何调整大小的决策。您的TriGoButton类应覆盖getPreferredSize方法并返回适当的默认大小..

答案 1 :(得分:2)

我已经添加了您的代码。我认为您的问题是您的TriGoPanel不会覆盖getPreferredSize,因此它可能会调整自身的大小。考虑在类中添加类似:

   @Override
   public Dimension getPreferredSize() {
      if (isPreferredSizeSet()) {
         return super.getPreferredSize();
      }
      return new Dimension(PREF_W, PREF_H);
   }

你有宽度和高度尺寸的int常量PREF_W,PREF_H。

__________________________________________________

编辑:我强烈反对MadProgrammer推荐的所有内容!