在JPanel部分周围划线

时间:2014-11-27 07:27:39

标签: java swing jframe jpanel border

您好我正在尝试添加一个边框或换行符,将北段与JPanel的其余部分分开。基本上使用设置边框我在整个窗口周围有一个边框,但是然后想要从边框的一个部分直线横向到另一边。当我向添加到BorderLayout.NORTH的JPanel添加边框时,它会在该部分内放置一个完整的边框。不是该部分的轮廓。希望你知道我的意思。

附件我的代码中有一部分到目前为止我的所有JPanel代码都在其中。我想要的任何帮助,谢谢。

import javax.swing.*;
import javax.swing.border.*;

import java.awt.*;

public class GamePanel extends JPanel {

private JTextPane playertext;
private JTextField wealthstring, currentwealth;

public GamePanel() {

    super();
    setLayout(new BorderLayout());
    setBackground(Game.getBackgroundColor());
    Border raised = BorderFactory.createRaisedBevelBorder();
    Border lowered = BorderFactory.createLoweredBevelBorder();
    setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(4, 4, 4, 4), (BorderFactory.createCompoundBorder(raised, lowered))));
    add(northpanel(), BorderLayout.NORTH);
    add(eastpanel(), BorderLayout.EAST);


}


private JPanel northpanel() {

    Font northfont = new Font("Engravers MT", Font.BOLD, 12);

    playertext = new JTextPane();
    playertext.setFont(northfont);
    playertext.setEditable(false);
    playertext.setText("Player: \n" + Game.getName());
    playertext.setBackground(Game.getBackgroundColor());
    playertext.setBorder(new EmptyBorder(10,10,10,10));

    wealthstring = new JTextField("Money: ");
    wealthstring.setFont(northfont);
    wealthstring.setEditable(false);
    wealthstring.setHorizontalAlignment(wealthstring.RIGHT);
    wealthstring.setBorder(null);
    wealthstring.setBackground(Game.getBackgroundColor());

    currentwealth = new JTextField();
    currentwealth.setFont(northfont);
    currentwealth.setEditable(false);
    currentwealth.setHorizontalAlignment(wealthstring.RIGHT);
    currentwealth.setBackground(Game.getBackgroundColor());
    currentwealth.setBorder(null);
    String wealthrounded = String.format("%.2f", Game.getMoney());
    currentwealth.setText(wealthrounded);

    JPanel wealthtext = new JPanel();
    wealthtext.setLayout(new GridLayout(2, 1));
    wealthtext.setBackground(Game.getBackgroundColor());
    wealthtext.setBorder(new EmptyBorder(10,10,10,10));
    wealthtext.add(wealthstring);
    wealthtext.add(currentwealth);

    JPanel northpanel = new JPanel();
    northpanel.setLayout(new BorderLayout());
    northpanel.setBackground(Game.getBackgroundColor());
    northpanel.add(playertext, BorderLayout.WEST);
    northpanel.add(wealthtext, BorderLayout.EAST);

    return northpanel;
}

private JPanel eastpanel() {


    JButton tab1 = new JButton("Tab 1");
    JButton tab2 = new JButton("Tab 2");
    JButton tab3 = new JButton("Tab 3");

    JPanel easttabs = new JPanel();
    easttabs.setLayout(new GridLayout(1, 3));
    easttabs.add(tab1);
    easttabs.add(tab2);
    easttabs.add(tab3);

    JPanel eastpanels = new JPanel();
    eastpanels.setLayout(new BorderLayout());
    eastpanels.add(easttabs, BorderLayout.NORTH);

    return eastpanels;
}

}

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

enter image description here

为此,我们将使用JSeparator

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class UnderlinePageStart {

    private JComponent ui = null;

    UnderlinePageStart() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new BorderLayout(4,4));
        ui.setBorder(new EmptyBorder(4,4,4,4));

        JPanel pageStart = new JPanel(new BorderLayout(2,2));
        ui.add(pageStart, BorderLayout.PAGE_START);
        pageStart.add(new JLabel("Page Start", SwingConstants.CENTER));
        // add a 'horizontal line'
        pageStart.add(new JSeparator(), BorderLayout.PAGE_END);

        ui.add(new JScrollPane(new JTextArea(5, 25)));
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                UnderlinePageStart o = new UnderlinePageStart();

                JFrame f = new JFrame("Underline Page Start");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}