我必须限制JTextField中的字符数.我使用以下代码来做到这一点,但问题是我使用虚拟键盘将数据提供给JTextField.因此偏移量始终设置为0.当我输入超过指定数量的字符时,它会重置字段并从头开始执行.例如,如果我的限制是3个字符并且我进入xyz0我的有限文本框,则读取字符z,然后清除该字段并重新启动.所以我留0在了现场.代码如下.
public class JTextFieldLimit extends PlainDocument {
private int limit;
public JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
@Override
public void insertString( int offset, String str, AttributeSet attr ) throws BadLocationException {
if (str == null) return;
System.out.println("from document helper getLength():"+getLength());
System.out.println("from document helper str.length():"+str.length());
System.out.println("from document helper str:"+str);
System.out.println("from document helper attr:"+attr);
System.out.println("from document helper offset:"+offset);
if ((getLength() + str.length()) <= limit) {
super.insertString(offset, str, attr);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我开始学习java编程,我认为通过游戏开发学习java很酷.我知道如何绘制图像并听取按键然后移动该图像.但是当窗口正在聆听按键时,是否可以使图像前后移动到窗口?例如,当图像或物体(如宇宙飞船)在窗口中从左向右移动时,如果我按空格键,激光将在屏幕底部闪光(酷吧:D).但基本上我只想知道如何在窗口正在聆听按键时让图像从左向右移动.
我想我会在我的窗口添加一个关键监听器,然后触发一个无限循环来移动图像.或者我是否需要了解线程以便另一个线程移动对象?
请指教.
非常感谢.
我正在使用Netbeans GUI,我想在jTextField的开头添加3个像素的空间:

我已经在GUI中尝试了setMargin,setInset,但它没有改变任何东西.
我有另一个问题,为什么右下边框不圆?这是我的代码:
Border roundedBorder = new LineBorder(new Color(210,210,210), 1, true);
researchTextField.setBorder(roundedBorder);
Run Code Online (Sandbox Code Playgroud)
非常感谢你,
问候
所以我创建了一个基本的应用程序,我希望在屏幕底部有一个JLabel,从左下角开始,动画样式,在设定的时间内移动到右下角,中心的静态图像.为此,我使用BorderLayout创建了一个带JPanel的JFrame.有一个JLabel,其中ImageIcon添加到BorderLayout.CENTER,而一个JPanel添加到BorderLayout.SOUTH.我的代码虽然草率而且非常漂亮,但是:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.BorderFactory;
public class GameWindow extends JPanel{
private static JLabel mainWindow, arrowLabel, arrowBox;
protected static JFrame frame;
protected static JPanel arrows;
public static int x = 600;
public GameWindow(){
mainWindow = new JLabel("Center");
arrowLabel = new JLabel("Moving");
arrows = new JPanel();
arrows.setSize(600, 100);
arrows.setLayout(null);
arrowBox = new JLabel("");
arrowBox.setBounds(0, 0, 150, 100);
arrowBox.setPreferredSize(new Dimension(150, 100));
arrowBox.setBorder(BorderFactory.createLineBorder(Color.black));
arrows.add(arrowBox);
this.setSize(600,600);
this.setLayout(new BorderLayout());
this.add(mainWindow, …Run Code Online (Sandbox Code Playgroud) import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cards extends JFrame {
private GridLayout grid1;
JButton []bt=new JButton[52];
ImageIcon tail=new ImageIcon(getClass().getResource("b1fv.png"));
ImageIcon ori;
public Cards(){
grid1=new GridLayout(7,9,2,2);
setLayout(grid1);
for(int i=0;i<bt.length;i++){
ImageIcon c=new ImageIcon(getClass().getResource(i+1+".png"));
bt[i]=new JButton(c);
bt[i].addActionListener(new RatingMouseListener(i));
add( bt[i]);
}
}
public static void main(String[] args){
Cards frame=new Cards();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1400,700);
frame.setVisible(true);
}
private class RatingMouseListener implements ActionListener {
private int index=0;
public RatingMouseListener(int index) {
this.index = index;
}
public void actionPerformed(ActionEvent e) {
System.out.println("Mouse entered for rating " …Run Code Online (Sandbox Code Playgroud) 实现Scrollable接口需要实现getPreferredScrollableViewportSize()方法.这通常只需将调用转发到getPreferredSize()来完成 - 除非Scrollable的其他参数可能影响首选的JViewport大小,例如JTree中的setVisibleRowCount()方法.
我有一种情况,我认为这种方法可以帮助我实现我的目标,但在我的getPreferredScrollableViewportSize()实现中的一个简单的print语句确认它永远不会被调用.搜索JScrollPane,ScrollPaneLayout和JViewport确认没有(直接)调用该方法.然而,JScrollPane中的注释明确指出ScrollPaneLayout使用它,我可以确认它是在JTree中按预期实现的.
什么时候调用,什么类(大概是LayoutManager)和什么时候?我正在使用JDK 1.7_07
我怎样才能破坏Jframe对象(就像不应该留下引用一样),因为我正在实现多用户登录系统,如app这样的用户可以添加歌曲删除歌曲.我有3帧loginFrame,adminFrame,nonAdminFrame .. loginFrame =登录,启动nonAdminFrame,其中添加删除歌曲照顾我正在处理登录,因为我有数据文件夹,其中.txt文件用于写有歌曲的用户对象信息类型链接列表.我登录的方式我查看数据文件夹,看看是否有.txt文件名为user1.txt文件,它将所有数据加载到nonadminFrame ...问题是登录不能正常工作,因为它引用旧的nonAdminFrame以前的用户数据仍然存在的地方......
我有3个类或3个JFrame.主类是loginFrame.我获取登录信息,看看用户是admin还是nonadmin,然后通过创建一个新的adminFrame()对象或nonAdminFrame()对象来显示admin或nonadminFrame,并设置loginFrame.setVisible(false); 问题出在nonAdminFrame,其中所有的itunes库都发生了.我有JTree显示该用户的所有歌曲,一旦点击退出我使用frame.dispose()处理nonAdmin帧但如果我再次使用不同的再次登录创建一个nonadminFrame()对象,我会看到旧用户的数据JTree认为问题......
我的类实现了ActionListener.我在下面实现了以下嵌套类:
JMenuItem mntmNew = new JMenuItem("New...");
mntmNew.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
doNew(e); //calls to outer class for cleaner code
}
});
mnFile.add(mntmNew);
JMenuItem mntmLoad = new JMenuItem("Load...");
mntmLoad.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
doLoad(e); //calls to outer class for cleaner code
}
});
mnFile.add(mntmLoad);
//etc. for the rest of the menu system
Run Code Online (Sandbox Code Playgroud)
但是,Eclipse仍然告诉我,我的类必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent e).你能不能以这种方式在嵌套类中实现覆盖方法?
所以我要做的是创建这个: 
我正在使用一个网格布局,这是我到目前为止所拥有的:
public class board {
public static void addComponentsToPane(Container pane) {
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JPanel leftTop = new JPanel();
leftTop.setPreferredSize(new Dimension(251,300));
leftTop.setBackground(Color.black);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
pane.add(leftTop, c);
JPanel middleTop = new JPanel();
middleTop.setPreferredSize(new Dimension(251,200));
middleTop.setBackground(Color.green);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 0;
pane.add(middleTop, c);
JPanel rightTop = new JPanel();
rightTop.setPreferredSize(new Dimension(251,600));
rightTop.setBackground(Color.blue);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 2;
c.gridy = 0;
pane.add(rightTop, c);
JPanel leftBottom = new …Run Code Online (Sandbox Code Playgroud) java ×10
swing ×10
animation ×2
jtextfield ×2
actionevent ×1
awt ×1
border ×1
imageicon ×1
interface ×1
jframe ×1
jscrollpane ×1
jtable ×1
jviewport ×1
layout ×1
margin ×1
nested-class ×1
scrollable ×1
timer ×1