Java 未设置JPanel大小
我目前正在开发一个irc机器人,今天我想为它创建一个GUI 我正在尝试创建一个包含左右两部分的列布局。 左侧显示控制台输出,右侧包含所有控件(连接通道、命令等) 我在创建这两个列时遇到问题。我有一个JPanel,它是窗口的整个宽度和高度,有10个像素的边框,然后我有两个面板;左和右 由于某种原因,左右面板占据了整个窗口的大小,而右面板重叠了所有部分 下面是一个示例图片: 白色是右侧面板,它的大小应该只有一半,左侧有一个相同但黑色的面板 这是我当前的代码,如果它凌乱,很抱歉,这是整个Swing GUI的新代码。。谢谢你的帮助Java 未设置JPanel大小,java,swing,user-interface,layout-manager,Java,Swing,User Interface,Layout Manager,我目前正在开发一个irc机器人,今天我想为它创建一个GUI 我正在尝试创建一个包含左右两部分的列布局。 左侧显示控制台输出,右侧包含所有控件(连接通道、命令等) 我在创建这两个列时遇到问题。我有一个JPanel,它是窗口的整个宽度和高度,有10个像素的边框,然后我有两个面板;左和右 由于某种原因,左右面板占据了整个窗口的大小,而右面板重叠了所有部分 下面是一个示例图片: 白色是右侧面板,它的大小应该只有一半,左侧有一个相同但黑色的面板 这是我当前的代码,如果它凌乱,很抱歉,这是整个Swing G
package tk.TaylerKing.GribbyBot;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.BorderFactory;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import com.alee.laf.WebLookAndFeel;
import com.alee.laf.menu.WebMenuBar;
import com.alee.laf.menu.WebMenuItem;
import com.alee.laf.panel.WebPanel;
import com.alee.laf.rootpane.WebFrame;
public class GribbyBot extends WebFrame {
private static final long serialVersionUID = 4641597667372956773L;
public static HashMap<String, ArrayList<String>> connections = new HashMap<String, ArrayList<String>>();
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(WebLookAndFeel.class.getCanonicalName());
SwingUtilities.invokeLater(new Runnable(){
public void run(){
GribbyBot gb = new GribbyBot();
gb.setVisible(true);
}
});
}
public GribbyBot(){
WebPanel panel = new WebPanel();
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
panel.setPreferredSize(new Dimension(780, 580));
WebMenuBar menu = new WebMenuBar();
WebMenuItem file = new WebMenuItem("Exit");
file.setMnemonic(KeyEvent.VK_E);
file.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menu.add(file);
setJMenuBar(menu);
WebPanel left = new WebPanel();
left.setPreferredSize(new Dimension(380, 580));
left.setBackground(Color.BLACK);
WebPanel right = new WebPanel();
right.setPreferredSize(new Dimension(380, 580));
right.setBackground(Color.WHITE);
add(panel);
panel.add(left);
panel.add(right);
setTitle("GribbyBot");
setSize(800, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
}
}
包tk.taylelking.GribbyBot;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.util.ArrayList;
导入java.util.HashMap;
导入javax.swing.BorderFactory;
导入javax.swing.SwingUtilities;
导入javax.swing.UIManager;
导入com.alee.laf.WebLookAndFeel;
导入com.alee.laf.menu.WebMenuBar;
导入com.alee.laf.menu.WebMenuItem;
导入com.alee.laf.panel.WebPanel;
导入com.alee.laf.rootpane.WebFrame;
公共类GribbyBot扩展了WebFrame{
私有静态最终长serialVersionUID=4641597667372956773L;
public static HashMap connections=new HashMap();
公共静态void main(字符串[]args)引发异常{
UIManager.setLookAndFeel(WebLookAndFeel.class.getCanonicalName());
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
GribbyBot gb=新的GribbyBot();
gb.setVisible(真);
}
});
}
公共灰熊{
WebPanel=新WebPanel();
panel.setBorder(BorderFactory.createEmptyByOrder(10,10,10,10));
面板。设置首选尺寸(新尺寸(780580));
WebMenuBar菜单=新建WebMenuBar();
WebMenuItem文件=新的WebMenuItem(“退出”);
setMnemonic文件(KeyEvent.VK_E);
addActionListener(新ActionListener()){
已执行的公共无效操作(操作事件e){
系统出口(0);
}
});
菜单.添加(文件);
setJMenuBar(菜单);
WebPanel left=新WebPanel();
左。设置首选尺寸(新尺寸(380580));
左。背景(颜色。黑色);
WebPanel right=新建WebPanel();
右。设置首选尺寸(新尺寸(380580));
右。挫折背景(颜色。白色);
添加(面板);
面板。添加(左);
面板。添加(右);
片名(“灰熊”);
设置大小(800600);
setLocationRelativeTo(空);
setDefaultCloseOperation(关闭时退出);
可设置大小(假);
}
}
另一方面,所有以“Web”为前缀的变量与Swing相同,但它是一个自定义GUI。重写而不是使用setPreferredSize()
阅读更多
如果在紧急情况下非常需要,请尝试以下方法:
示例代码:
final JPanel panel = new JPanel(){
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
// your custom painting code here
}
@Override
public Dimension getPreferredSize() {
return new Dimension(40, 40);
}
};
为什么要使用
setPreferredSize()
方法,而您可以使用任何适当的布局(如BoxLayout
、GridLayout
、BorderLayout
等)轻松实现此设计
了解更多关于布局的信息
编辑
try
JPanel panel=newjpanel(newgridlayout(1,2))代码>在这种情况下,发布最小可测试代码。我不知道这里什么是WebFrame
,WebPanel
?似乎是外部GUI的问题,我现在已经解决了。谢谢我已经更新了我的帖子。删除所有setPreferredSize()
方法后尝试此方法。