我遇到的问题是弄清楚如何将我的按钮类链接到我的主程序。我意识到我有很多来自外部类的方法,所以我将尝试给出一个概述。基本上我有一个引号的数组列表和一个从字母表随机排列创建的键。我用这个键“加密”报价。通过这种方法:
public static String translate ( String text, String key )
{
String newText = "";
for( int i = 0; i < text.length(); i++ )
{
char currentLetter = text.charAt( i );
if( ALPHA.contains( Character.toString( currentLetter ) ) )
{
int index = ALPHA.indexOf( currentLetter );
char newLetter = key.charAt( index );
newText = newText + text.substring( i, i + 1 ).replace
( currentLetter, newLetter ) ;
}
else
newText = newText + currentLetter;
}
return newText;
}
所以我想做的是拥有一个用户输入的按钮,并用该输入替换引号中的字母。我没有使用JButton
,我正在使用库来制作正方形,然后使用mouseEvent
。我在这里单独创建了一个按钮:
import wheelsunh.users.*;
import java.awt.Color;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
/**
* Creates a button
*
* @author Scott
*/
public class SubstituteButton extends RoundedRectangle
{
String response;
public SubstituteButton( int x, int y )
{
super( x, y );
super.setSize( 20, 20 );
super.setFillColor( Color.LIGHT_GRAY );
super.setFrameColor( Color.BLACK );
}
public void mousePressed( MouseEvent e )
{
super.setFillColor( new Color( 131,111,255 ) );
try
{
response = JOptionPane.showInputDialog( "Which letter"
+ " would you like to replace? Ex. ab would replace all a's"
+ " with b's" );
}
catch( NullPointerException exeception )
{
JOptionPane.showMessageDialog( null, "Input Error" );
}
super.setFillColor( Color.LIGHT_GRAY );
}
public String getInput()
{
if( response.length() == 2 &&
Character.isLetter( response.charAt( 0 ) ) &&
Character.isLetter( response.charAt( 1 ) ))
{
return response;
}
return null;
}
public static void main( String args[] )
{
new Frame();
new SubstituteButton( 100, 100 );
}
}
HSo如何更新显示的报价以便替换字母?我以为我可以在按钮类中使用replace()
方法,但它不会更新显示的引用。这是主要的计划:
import wheelsunh.users.*;
import java.util.*;
import java.lang.Character;
/**
* Displays a quote with letters in blocks and punctuation without blocks.
* If a letter has been changed from the original then it is highlighted.
* Displayed lines must be broken to stay on frame.
*
*
* @author Scott
*/
public class CryptogramApp extends ShapeGroup
{
private ArrayList< String > blockQuote;
private int quoteLength;
private SubstituteButton substituebutton;
private boolean newState = true;
private String key, quote, encryptedQuote;
/**
* Creates a block-quote with first letter at initialX,initialY
* with the text from quote.
*
* @param initialX int
* @param initialY int
* @param quote String
*/
//--------------------------------------------------------------------------
public CryptogramApp( int initialX, int initialY )
{
if( newState == true )
newQuote();
int newx = initialX;
for( int i = 0; i < quote.length(); i++ )
{
String letter = Character.toString( encryptedQuote.charAt( i ) );
BlockLetter b = new BlockLetter( newx, initialY, letter );
newx += BlockLetter.WIDTH;
if( letter.equals(" ") && b.getXLocation() > 400 )
{
newx = initialX;
initialY += 40;
}
}
newState = false;
}
public void newQuote()
{
blockQuote = new ArrayList<String>();
key = StringUtilities.getRandomKey();
quote = getRandomQuote();
System.out.println( key );
encryptedQuote = StringUtilities.translate( quote, key );
System.out.println( encryptedQuote );
substituebutton = new SubstituteButton( 425, 350 );
}
//--------------------------------------------------------------------------
/**
* Returns the String text with the jth character replaced with key.
*
* @param text String
* @param key String
* @param j int
*
* @return String
*/
public String getRandomQuote()
{
Random gen = new Random();
ArrayList< String > list = StringUtilities.getQuotes();
String quote = list.get( gen.nextInt( 6 ) );
return quote;
}
//--------------------------------------------------------------------------
/**
* Runs a simple test of CryptogramApp.
*
* @param args String[]
*/
public static void main( String args[] )
{
new Frame( 700, 500 );
new CryptogramApp( 20, 50 );
}
}
答案 0 :(得分:2)
@MadProgrammer显然是正确的。你为什么没有将JButton
??
现在到你的代码,
目前尚不清楚您收到的错误或不适合您的错误。
你应该
public class SubstituteButton extends RoundedRectangle implements MouseListener
并在某个阶段
SubstituteButton button=new SubstituteButton();
button.addMouseListener(button)
?这会将您的按钮连接到监听器。
另外,你在哪里添加按钮到框架? 请发布完整的代码。