我对GridBag布局管理器有一点问题.我试图显示9个这样的面板:
为此,我将网格分开:
对于面板1到7没有问题,它们就像我想要的那样出现.但问题始于小组S8
和S9
.正如你所看到的那样S8
,S9
占据了一半的框架,但是我无法让它显示出来.该S8
在的始端S4
,以及S9
在年底开始S4
,我不能处理的一半的空间.
我想出的唯一方法就是将面板S8
和S9
面板放在另一个采用所有框架宽度的面板上 - 但是必须有一个正确的方法来显示这两个面板而不将它们放在另一个面板中!
这是代码:
workzone.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.fill = GridBagConstraints.BOTH;
c.weightx = 0.5;
c.weighty = 0.5;
c.insets = new Insets(0,0,0,0);
//S1
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 2;
workzone.add(S1, c);
//S2
c.gridx = 2;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
workzone.add(S2, c); …
Run Code Online (Sandbox Code Playgroud) 请注意,这是一篇很长的帖子.对不起,但我想澄清一点:
我想知道如何将Swing GUI与Presentation和Business Logic分开很长一段时间.在工作中,我必须使用一个小的Swing对话框为一些数据实现3 MD Excel Export以配置导出.我们不使用像Spring这样的框架,所以我必须自己实现它.
我想完全将GUI与Business Logic分开,这些都是精确的后续任务:
当然,GUI不应该注意BL实现,反之亦然.我创建了上述所有这些任务,例如几个接口ProgressListener
,LogMessageListener
,JobDoneListener
等,要由业务逻辑被解雇.例如,如果业务逻辑想要告诉记录,则会调用
fireLogListeners("Job has been started");
Run Code Online (Sandbox Code Playgroud)
实现公共接口LogListener +的类附加到BL,现在将通知有关"作业已启动"的日志消息.所有这些监听器此时都是由GUI本身实现的,一般看起来像这样:
public class ExportDialog extends JDialog implements ProgressListener, LogListener, JobFinishedListener, ErrorListener {
@Override
public void jobFinished(Object result){
// Create Save File dialog and save exported Data to file.
}
@Override
public void reportProgress(int steps){
progressBar.setValue(progressBar.getValue()+steps);
}
@Override
public void errorOccured(Exception ex, String additionalMessage){
ExceptionDialog dialog = new ExceptionDialog(additionalMessage, ex);
dialog.open();
}
// etc.
}
Run Code Online (Sandbox Code Playgroud)
"GUI和BL创建类"只是将GUI(作为所有这些侦听器的界面)附加到BL,它看起来像这样: …
我想自定义一个JLable让他可以点击,我不是在谈论添加一个动作监听器,因为我已经拥有,我正在谈论改变鼠标光标的反应,当JLabel获得焦点就像鼠标胡佛的反应一样浏览器中的链接.
我觉得摇摆是不可能的.
我有一个JPanel
包含一个JComboBox
.我打算在JComboBox
打开时截取此面板的截图.但我不能这样做.任何的想法?
如果您运行此代码然后Alt-P在组合打开时按,您将看到问题.
public class ScreenShotDemo {
/**
* @param args
*/
public static void main(String[] args) {
final JPanel JMainPanel = new JPanel(new BorderLayout());
JPanel jp = new JPanel();
jp.add(new JComboBox<String>(new String[] { "Item1", "Item2", "Item3" }));
final JPanel jImage = new JPanel();
JMainPanel.add(jp, BorderLayout.WEST);
JMainPanel.add(jImage, BorderLayout.CENTER);
jp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.ALT_DOWN_MASK), "screenshot");
jp.getActionMap().put("screenshot", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
BufferedImage bf = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
JMainPanel.paint(bf.getGraphics());
jImage.getGraphics().drawImage(bf, 0,0,jImage);
}
}); …
Run Code Online (Sandbox Code Playgroud) 我需要在组合框中提供一些禁用的项目。除了防止在单击禁用的项目后关闭组合框之外,所有其他方法都工作正常。
这是我的代码:
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import javax.swing.plaf.basic.ComboPopup;
public class DisabledCombo {
public static void main(String[] args) {
final DisabledSupportComboModel model = new DisabledSupportComboModel();
model.addElement(new Item("First element"));
model.addElement(new Item("Second element"));
model.addElement(new Item("Disabled", false));
model.addElement(new Item("Fourth element"));
final JComboBox<Item> itemCombo = new JComboBox<DisabledCombo.Item>(model);
itemCombo.setRenderer(new DisabledSupportComboRenderer());
final ComboPopup popup = (ComboPopup) itemCombo.getUI().getAccessibleChild(itemCombo, 0);
final JList<?> l = popup.getList();
final MouseListener[] listeners = l.getMouseListeners();
for …
Run Code Online (Sandbox Code Playgroud) 我JTable
在JScrollPane
.
JTable table = new JTable(data, columnNames);
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(table);
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是如果我需要在 Scrollpanel 和 table 之间留出更多空间?我怎样才能做到这一点?例如:HTML/CSS
如果我们使用<div>
标签,我们有“填充”方法。我需要这样的东西。
JTable
我的问题与和相关DefaultTableModel
。我的任务是创建JTable
一个显示带有复选框的数据...我成功地完成了..但是我想删除由JTable
复选框选择的行...我知道这已经被问了太多次...而且我需要使用removeRow(int row)
方法用于删除...但是当我执行该语句时
DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
int totalrows=model.getRowCount();
for (int i = totalrows - 1 ; i >= 0; i--)
{
Boolean checked = (Boolean) jTable1.getModel().getValueAt(i, 8);
if (checked)
{
((DefaultTableModel)jTable1.getModel()).removeRow(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它总是从getRowCount()
方法返回 0,因此它不会进入循环。表已经有行。
我的TableModel
班级如下
public class tabmod extends DefaultTableModel
{
public tabmod(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
if (col == 8)
return Boolean.class;
return super.getColumnClass(col); //other columns accept String …
Run Code Online (Sandbox Code Playgroud) 我正在使用一个UndoManager
来捕捉我的变化JTextArea
.
setText()
然而,该方法删除所有内容,然后粘贴文本.当我撤消时,我首先看到一个空白区域,然后它会显示它之前有哪些文本.
如何重现:
setText()
按钮我想跳过3).
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.Document;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class JTextComponentSetTextUndoEvent extends JFrame
{
JTextArea area = new JTextArea();
public JTextComponentSetTextUndoEvent()
{
setSize(300, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(null);
area.setText("Test");
area.setBounds(0, 96, 146, 165);
getContentPane().add(area);
JButton btnSettext = new JButton("setText()");
btnSettext.addActionListener(new ActionListener()
{
public void …
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个蛇和梯子游戏,它运行良好,但现在我想添加一点修改它.我希望每个球员都有两个球员而不是一个球员.现在新的规则变成了,同一个玩家的两个部分可以占据同一个方格,因此我需要一种方法来在同一个方格中显示它们.我使用JLable来识别每个方块,但现在我希望每个方块都能容纳多个方块.也就是说,如果一个正方形被多个部分占用,则用户必须能够点击一个部分并仅选择该部分.有没有办法将square/JLable分成几个正方形/ JLabel?我不确定JLabel是否最好在这里使用...有什么建议吗???
可以说我在ruby中有一个数组,例如:
arr = ['M','X','C','Y','C']
Run Code Online (Sandbox Code Playgroud)
我如何可以替换的价值元素'M'
,并'Y'
用'1'
并替换'X'
为'2'
和最后'C'
用'5'
所以最后我的数组转换为:
['1','2','5','1','5']
Run Code Online (Sandbox Code Playgroud)
我知道我尝试了几种方法,例如case-loop:
arr.map { |i| case i
when ['X'].include? i then '2'
when ['M','Y'].include? i then '1'
when ['C'].include? i then '5'
end }
Run Code Online (Sandbox Code Playgroud)
但那不知何故给了我这个错误:
syntax error, unexpected keyword_end, expecting '}'
... end }
Run Code Online (Sandbox Code Playgroud)
我错了什么或者我可以使用什么呢?
想知道你是否可以帮助我?我试图创造一些Java中的编码,在执行HTML代码JEditorPane
的执行CSS
.
我得到它来实现一些的的CSS
编码作为一项规则,但它似乎忽略了"float:"
在编码位.在JSFiddle(链接)上我得到它完美运行,但在Java/NB上它创建了容器,左边div
是小的,假定的权利div
,但它把它放在左边div
,而不是右边.我在想的是Java,HTMLEditorKit
以及StyleSheet
不支持我想做的事情.有人能说清楚吗?
编辑:
似乎只HTML 3.2
支持.这有可能的解决方法吗?
import java.awt.Dimension;
import javax.swing.*;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
@SuppressWarnings("serial")
public class jBulletins extends JPanel {
javax.swing.JEditorPane bulletinBoard = new javax.swing.JEditorPane();
public jBulletins() {
Dimension d = new Dimension();
d.setSize(800, 600);
bulletinBoard.setPreferredSize(d);
bulletinBoard.setContentType("text/html"); // NOI18N
add(new JScrollPane(bulletinBoard));
loadBulletins();
}
private void loadBulletins() {
//<editor-fold defaultstate="collapsed" desc="HTML/CSS Script">
String eBullStyles = …
Run Code Online (Sandbox Code Playgroud) 嘿,我在试图让我的工具栏上的按钮改变我正在绘制的线条的颜色时遇到了很多麻烦.这是我的代码:
public class PaintingGUI {
private static final int FRAME_WIDTH = 960;
private static final int FRAME_HEIGHT = 640;
private final static String NEWLINE = System.lineSeparator();
private JTextArea textArea = new JTextArea();
class MyButtonListener extends JPanel implements MouseListener,
MouseMotionListener, ActionListener {
private int mouseX1 = -1; // the mouse Coordinates when pressed
private int mouseY1 = -1;
private int mouseX2 = -1; // mouse coordinates when released
private int mouseY2 = -1;
Color c;
JButton red, green, blue, yellow, orange, …
Run Code Online (Sandbox Code Playgroud)