• 关于 jframe布局 的搜索结果

问题

java 布局管理哪儿错了啊?? 400 报错

爱吃鱼的程序员 2020-06-02 17:09:34 0 浏览量 回答数 1

回答

public class TimerPanel extends JFrame implements ActionListener { 好吧,您可以调用类, TimerPanel但可以扩展JFrame。 如果该类是“面板”,则应该扩展JPanel。 TimerPanel panel = new TimerPanel(); frame.getContentPane().add(panel); 因为无法将JFrame添加到JFrame中,所以出现错误。 运行程序的任何帮助或任何其他改进 为什么要在测试之前尝试编写整个类?测试应逐步进行。 因此,您首先创建一个框架并进行测试。 然后将一些组件添加到框架并测试布局是否正确。 然后,将ActionListeners一次添加到您的按钮中,并对其进行测试。 这样,当您遇到问题时,您就知道自己刚刚做了什么更改。 回答来源:Stack Overflow

montos 2020-03-25 21:40:13 0 浏览量 回答数 0

回答

actionPerformed里加一句   requestFocusInWindow();没拿到焦点的控件是无法抓消息的。还有一点往JFrame上加加东西,getContentPane().add(panel)这么加,JDK里著名的,不然容易出现莫名其妙的问题。######@Monkey : JFrame的add就是getContentPane().add(),看看JFrame里的addImpl是怎么写的就行了,不过你要是习惯了我没意见######@Jeky : swing重量级控件都是交给JRootPane来实现的,为了安全起见还是多敲几个字母为好,比如改变布局,改变背景色什么的,否则万一哪天出错头想破了都不会想到错在这里了。######这个在JFrame里是没问题的,add默认就直接添加到contentPane里,除非你修改了rootPaneCheckingEnabled###### 第一你点击jb后要改变direction的值为"HELLO" 循环中要输出(direction)而非("haha") 第二你按下键盘上下左右后要改变direction的值为"wocao" 这两步你都没有做,而且代码写得不好!建议你重写一下~###### 跟线程没关系 键盘事件传递给的控件是当前焦点所在的控件,你给Frame加上KeyListener,那么只有当焦点是Frame的时候才会输出wocao 你可以在你的actionPerformed里的最后一行加上this.requestFocus(),让焦点回到Frame上,这样就行了

爱吃鱼的程序员 2020-06-03 16:42:37 0 浏览量 回答数 0

云原生Knative训练营

免费开通产品,还有CNCF指尖陀螺等你拿哦~

问题

java如何获取局域网内所有IP

蛮大人123 2019-12-01 20:25:37 1149 浏览量 回答数 1

回答

但右下角的那个是框架的相同尺寸。 Swing旨在与布局管理器一起使用。布局管理器将根据布局管理器的规则确定组件的大小/位置。 对于JFrame,默认的布局管理器为BorderLayout。在BorderLayout不使用“约束”的情况下将组件添加到中时,该组件将添加到中CENTER。但是,只能将一个组件添加到中CENTER。因此,只有最后添加的组件才由布局管理器给出大小/位置。在这种情况下,规则是使按钮具有框架中可用空间的大小。 如果要使用网格,则应使用GridLayout。然后,布局管理器将使每个按钮具有相同的大小。 阅读有关布局管理器的Swing教程中的部分,以获取更多信息。有对两个工作实例BorderLayout和GridLayout。 回答来源:Stack Overflow

montos 2020-03-27 22:31:14 0 浏览量 回答数 0

问题

小弟初学java,这个是我写的关于程序窗口布局的代码,求指出不足之处。? 400 报错

爱吃鱼的程序员 2020-06-03 16:37:18 1 浏览量 回答数 1

回答

您可以JPanel使用布局管理器进行布局,并在其上方进行自定义绘制。 这不会阻止您使用pack()1。 以下mre 2 演示了JPanel使用绘制线条GridLayout: import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class NetworkViewPanel extends JPanel{ private final List<JLabel> labels; public NetworkViewPanel() { this.setLayout(new GridLayout(2, 2, 2, 2)); this.setPreferredSize(new Dimension(400,300));//used by pack() labels = new ArrayList<>(); addLabels(new String[]{ "A", "B" , "C" , "D"}); } private void addLabels(String[] text){ for(String t: text){ JLabel label = new JLabel(t); label.setBorder(BorderFactory.createLineBorder(Color.BLUE)); label.setHorizontalAlignment(JLabel.CENTER); add(label); labels.add(label); } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); //draw panel as layed out by layout manager drawLines(g); } private void drawLines(Graphics g) { //draw line between centers of first and last components int x1 = labels.get(0).getBounds().x + labels.get(0).getBounds().width /2; int y1 = labels.get(0).getBounds().y + labels.get(0).getBounds().height /2; int x2 = labels.get(labels.size()-1).getBounds().x + labels.get(labels.size()-1).getBounds().width/2; int y2 = labels.get(labels.size()-1).getBounds().y + labels.get(labels.size()-1).getBounds().height/2; g.setColor(Color.RED); g.drawLine(x1, y1, x2, y2); } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); f.add(new NetworkViewPanel()); f.pack(); f.setVisible(true); } } 1 请参阅:.pack()的作用是什么? 2 在询问或回答时考虑发布信息 回答来源:Stack Overflow

montos 2020-03-22 15:54:10 0 浏览量 回答数 0

回答

您有两个问题: 安德鲁解决了第一个问题。您使用了错误的方法。接下来,您使用的是错误的布局。FlowLayout仅在一行上显示组件,因此组件将始终位于顶部。不要更改布局管理器。JFrame的默认布局管理器是BorderLayout。当您向中添加组件时CENTER(这是您未指定约束时的默认值),该组件的大小将适合整个框架。然后,“对齐”属性将控制文本在分配给标签的大小内的位置。 或另一种选择是使用GridBagLayout。然后,您无需使用组件的对齐选项: setLayout( new GridBagLayout() ); add(label, new GridBagConstraints()); 尝试两个选项,因为两者可能在不同情况下都有效。 阅读有关布局管理器的Swing教程,以更好地了解每个布局管理器如何工作。 回答来源:Stack Overflow

montos 2020-03-27 16:06:04 0 浏览量 回答数 0

问题

使用GridBagLayout布局,怎样设置组件大小,? 400 报错

爱吃鱼的程序员 2020-05-30 22:16:16 0 浏览量 回答数 1

回答

第一个问题,你的结果之所以不是3行3列, GridLayout(3,3)布局时,设定的列数只有在行数为0时才起作用;当行数不为0时,列数是由行数和添加的布局组件总数决定的。比如,你的程序里面,行数为3,布局组件总数为4,那么列数将被确定为2,所以,你会看到运行之后的布局。第二个问题,你的p4有两行,所以就是这样的效果了。修正代码如下(布局行数为0,p4为1行),可以看到你需要的效果: public class JPanelTest extends JFrame{ public JPanelTest() throws HeadlessException { Container c = getContentPane(); c.setLayout(new GridLayout(0,3,10,10)); JPanel p1 = new JPanel(new GridLayout(1,1,10,10)); JPanel p2 = new JPanel(new GridLayout(1,2,10,10)); JPanel p3 = new JPanel(new GridLayout(1,2,10,10)); JPanel p4 = new JPanel(new GridLayout(1,1,10,10)); p1.add(new JButton("1")); p2.add(new JButton("2")); p3.add(new JButton("3")); p4.add(new JButton("4")); c.add(p1); c.add(p2); c.add(p3); c.add(p4); setSize(400,500); setVisible(true); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } public static void main(String[] args) { new JPanelTest(); } }

蛮大人123 2019-12-02 02:13:55 0 浏览量 回答数 0

问题

将布局管理器与JPanel和Graphics 2D结合使用

montos 2020-03-22 15:52:43 1 浏览量 回答数 1

回答

java swing中在jTable中添加多个复选框的方式如下: import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.table.*; public class MyFirstJFrame extends JFrame { // 作为测试的main方法 public static void main(String[] args) { new MyFirstJFrame().setVisible(true); } /** * 构造方法 */ public MyFirstJFrame() { InitialComponent(); } /** * 初始化组件的方法 */ private void InitialComponent(){ // 设置窗体参数 // 设置布局模式 setLayout(null); // 设置窗体大小 setSize(480, 360); // 设置窗体居中(非常规方法) setLocationRelativeTo(null); // 关闭窗体退出程序 setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 初始化面板 panel = new JPanel(); panel.setSize(this.getWidth(), this.getHeight()); panel.setLocation(0,0); panel.setLayout(null); // 初始化表格 table = new JTable(new DefaultTableModel(new Object[][]{{"第一行"},{"第二行"},{"第三行"},{"第四行"}}, new String[]{"测试行1","测试行2"}){ /* (non-Javadoc) * 重写方法,判断表单元格是否可编辑 * 可以通过row和column索引判断某一个单元格是否可编辑 * 此处设为都不可编辑 * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int) */ @Override public boolean isCellEditable(int row, int column) { return false; } }); // 开始向表格中添加复选框(注意:此示例较为简单,缺省很多判断,也没有动态代码支持) // 通过设置列渲染 // 方法一:直接方式 使用TableColumn的setCellRenderer方法(推荐) // 此方法可以设置某一列的渲染(即使用某一个组件--即控件来显示单元格数据) table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer(){ /*(non-Javadoc) * 此方法用于向方法调用者返回某一单元格的渲染器(即显示数据的组建--或控件) * 可以为JCheckBox JComboBox JTextArea 等 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int) */ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 创建用于返回的渲染组件 JCheckBox ck = new JCheckBox(); // 使具有焦点的行对应的复选框选中 ck.setSelected(isSelected); // 设置单选box.setSelected(hasFocus); // 使复选框在单元格内居中显示 ck.setHorizontalAlignment((int) 0.5f); return ck; }}); // 方法二:先设置列编辑器,然后设置单元格渲染 // 设置列编辑器 // 在以复选框为对象设置列编辑器时,必须保证该列能够被编辑,否则无法更改状态 // (此步骤可以省略,省略时不要忘记将列设为不可编辑) // table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox())); // 设置单元格渲染(这里是设置表格级别的渲染) /*table.setDefaultRenderer(Object.class, new TableCellRenderer(){ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 判断是否为需要渲染的列 if(column == 1){ // 和方法一基本一致 JCheckBox box = new JCheckBox(); box.setSelected(isSelected); // 设置单选box.setSelected(hasFocus); box.setHorizontalAlignment((int) CENTER_ALIGNMENT); // 0.5f return box; } // 如果不是需要渲染的列,封装文本域显示数据 return new JTextArea(value.toString()); }});*/ // 在多选是需要按住Ctrl键或者鼠标按住拖过连续的需要选中的行,应该给用户说明 // 第一种方法是被推荐的,因为它具有选中的高亮显示,界面能更加友好 table.setSize(panel.getWidth(),panel.getHeight() - 90); table.setLocation(0, 0); btn = new JButton("Test"); btn.setSize(80,40); btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80); // 按钮点击时显示当前选中项 btn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { for(int rowindex : table.getSelectedRows()){ JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0)); } }}); panel.add(table); panel.add(btn); this.add(panel); } // 定义一些必要的组件 private JPanel panel; private JTable table; private JButton btn; }

蛮大人123 2019-12-02 01:56:29 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播