見守り電球またはGPS端末が特価中!

こんにちは。
Javaでコンボボックスを使いたいのですが、コンボボックスを使うと必ず

注意:~.javaの操作は、未チェックまたは安全ではありません。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。

と出てしまいます。
自分なりに調べたところ、どうもGenericsというものが解決のカギとなっているんじゃないかとにらんでいるのですがよくわかりません。

以下に警告のでるプログラムを掲載します。

public class fun extends JFrame implements ActionListener{
String[] A;
JComboBox data;

------省略------
public fun(){   //コンストラクタ
A = datain();
data = new JComboBox(A);

------省略------

public String[] datain()
txtファイルからのデータ入力作業
}

public static void main(String[] args){
new fun();
}

※入力データの例 テキストファイル
 あいうえお
 かきくけこ
 さしすせそ
 たちつてと

そしてコンボボックスで選択をできるようにしたいのですが、この警告が出ないようなやり方を教えてください。よろしくお願いします。

A 回答 (3件)

なるほど、Java 7でJComboBoxの仕様が変わっていたんですね。

Java 6で試していたので何が問題なのか分かりませんでした。
JComboBoxの変数を宣言するところとコンストラクターを呼ぶところの両方で、< >で要素の型を指定してください。

String[] A;
JComboBox<String> data;

data = new JComboBox<String>(A);
    • good
    • 0
この回答へのお礼

わかりやすく教えていただきありがとうございます!!
java7のAPIの使用の日本語版が出ていないのでとても苦労を強いられています。

本当に助かりました。
ありがとうございます。

お礼日時:2011/10/24 21:56

この回答への補足

すみません。
英語で書かれているので何が書いてあるかわかりません。

まだ7用の日本語版は出ていないみたいですね。


結局のところどうすればよいのでしょうか?

補足日時:2011/10/24 18:40
    • good
    • 0
この回答へのお礼

ありがとうございました。

すみません。
本当は英語が読めればよかったのですが、ありがとうございました。

お礼日時:2011/10/24 21:57

質問文に書かれているコードは省略されすぎていて、肝心の部分が含まれていません。


指示されているようにjavacの-Xlint:uncheckedオプションを使って再コンパイルして、その結果指摘される部分と指摘内容を再掲してください。

この回答への補足

~.java:50: 警告:[unchecked] raw型JComboBoxのメンバーとしてのJComboBox
(E[])への無検査呼出しです
kashi1 = new JComboBox(kamoku);
^←nの下についています。
Eが型変数の場合:
クラス JComboBoxで宣言されているE extends Object
警告1個


と出てしまいます。
プログラムは関係なく,こういう使い方はできないということでしょうか?

補足日時:2011/10/23 23:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qあるコンボボックスを選択するともう一方のコンボボックスが自動的に決まる方法

二つのコンボボックスがあります。
1つのコンボボックスをcb1、もう一方のコンボボックスをcb2とします。cb1の中にはA、B、Cという項目があります。
質問の内容は、例えばcb1のAを選択するとcb2の項目が自動でa、b、cになっている、cb1のBを選択するとcb2の項目が自動でd、e、fになっている、ということなのです。
こんな感じに自動的に状態が変化することは可能なのでしょうか?宜しくお願いします。

Aベストアンサー

こんにちは、こんな感じの事を求めているのですか
コンボボックス1を選択すると、
コンボボックス2の項目が変わります。

/*
* twocombo.java
*
* Created on 2006/02/06, 10:46
*/

package combolist;

import javax.swing.DefaultComboBoxModel;

/**
*
* @author
*/
public class twocombo extends javax.swing.JFrame {
Object [] combo1 ={"a","b","c"};
Object [] combo2 ={"d","f","g","h"};
Object [] combo3 ={"i","j","k"};
Object [] combo4 ={"l","m","n","o"};

DefaultComboBoxModel com1,com2,com3,com4;

/** Creates new form twocombo */
public twocombo() {
com1= new DefaultComboBoxModel(combo1);
com2= new DefaultComboBoxModel(combo2);
com3= new DefaultComboBoxModel(combo3);
com4= new DefaultComboBoxModel(combo4);
initComponents();
jComboBox1.setModel(com1);
jComboBox2.setModel(com2);

}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" 生成されたコード">
private void initComponents() {
jComboBox1 = new javax.swing.JComboBox();
jComboBox2 = new javax.swing.JComboBox();

getContentPane().setLayout(null);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});

getContentPane().add(jComboBox1);
jComboBox1.setBounds(50, 60, 110, 21);

getContentPane().add(jComboBox2);
jComboBox2.setBounds(250, 60, 110, 21);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-408)/2, (screenSize.height-332)/2, 408, 332);
}
// </editor-fold>

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {

if (jComboBox1.getSelectedItem().equals(combo1[0])){
jComboBox2.setModel(com2);
}else if (jComboBox1.getSelectedItem().equals(combo1[1])){
jComboBox2.setModel(com3);
}else {
jComboBox2.setModel(com4);
}



// ここに処理コードを追加:
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new twocombo().setVisible(true);
}
});
}

// 変数宣言 - 編集不可
private javax.swing.JComboBox jComboBox1;
private javax.swing.JComboBox jComboBox2;
// 変数宣言の終わり

}

こんにちは、こんな感じの事を求めているのですか
コンボボックス1を選択すると、
コンボボックス2の項目が変わります。

/*
* twocombo.java
*
* Created on 2006/02/06, 10:46
*/

package combolist;

import javax.swing.DefaultComboBoxModel;

/**
*
* @author
*/
public class twocombo extends javax.swing.JFrame {
Object [] combo1 ={"a","b","c"};
Object [] combo2 ={"d","f","g","h"};
Object [] combo3 ={"i","j","k"};
Object [] combo4 ={"l","m","n","o"};
...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qコンボボックスにつきまして

JComboBoxを使って、コンボボックスを作成したいのすが、
表示は名称で、実際の値取得はコードで取りたいのですが、
可能でしょうか?
例えば、
コード  名称
001   りんご
002   ぶどう
003   パイン
というデータをセットし、
コンボボックスのドロップダウンでは「りんご」を選択したときには、
「001」という値を取得したいのです。

よろしくお願いします。

Aベストアンサー

Stringを値として設定するのでなく、Beanクラスを定義して、そこに値を保持しておけばいいんじゃないかと。例えば、

class DataBean {
private String name;
private String code;

public DataBean(String s,String c){
name = s;
code = c;
}

public String geCode(){
return c;
}

public String toString(){
return name;
}
}

こんなクラスを用意して、これを値としてJComboBoxに設定する。

combobox.addItem(new DataBean("りんご","001");

こんな感じにね。すると、JComboBoxに表示されるのはtoStringされたテキストだから、表示はnameになる。そして選択されたオブジェクトを取り出し、getCodeすればコード番号が取り出せる。

Qボタンの複数割り当てについて

public class TestButton extends Applet implements ActionListener
{
     Button bt1,bt2,bt3;

     public void init()
     {
         bt1 = new Button("red");
         add(bt1);
         bt2 = new Button("blue");
         add(bt2);
         bt3 = new Button("yellow");
         add(bt3);
         bt1.addActionListener(this);
      }

java初心者です。アプレットで上のようにボタンを作ります。それぞれが押された時に、red,blue,yellowが表示されるようにしたいのです。ActionListenerをインプリメントしているので、

     public void actionPerformed(ActionEvent ae)

をオーバーライドする必要がありますが、そこで質問です。
ボタンを3種類別々に関連づけるには、actionPerformed内をどのように記述したらよいでしょうか?また、init内はこれだけでいいんでしょうか?
よろしくお願いします。

public class TestButton extends Applet implements ActionListener
{
     Button bt1,bt2,bt3;

     public void init()
     {
         bt1 = new Button("red");
         add(bt1);
         bt2 = new Button("blue");
         add(bt2);
         bt3 = new Button("yellow");
         add(bt3);
         bt1.addActionListener(this);
      }

java初心者です。アプレットで上のようにボタン...続きを読む

Aベストアンサー

これは色々やり方があります。
ボタンをメンバ変数として定義してActionEventの
getSource()メソッドでEventが発生したObjectと
比較するとか、getSource()で取得したオブジェクト
をButtonにキャストしてからgetLabel()でラベルの
文字列を取得し任意の文字列と比較するとか。
他にはアクションコマンドで分岐する方法もあります。

・メンバ変数の例

public class TestButton extends Applet implements ActionListener {
  Button btn1,btn2,bt3;
  public void init(){
    btn1=new Button("red");
    add(btn1);
    btn2=new Button("blue");
    add(btn2);
    btn3=new Button("yellow");
    add(btn3);
  }
  public void actionPerformed(ActionEvent e){
    Object obj=e.getSource();
    if(obj == btn1){
      // "red"の処理
    }
    else if(obj == btn2){
      // "blue"の処理
    }
    else if(obj == btn3){
      // "yellow"の処理
    }
  }
}

・ラベルで比較する例

public void acitonPerformed(ActionEvent e){
  Object obj=e.getSource();
  if(obj instanceof Button){
    Button btn=(Button)obj;
    String labStr=btn.getLabel();
    if("red".equals(labStr)){
      // "red"の処理
    }
    else if("blue".equals(labStr)){
      // "blue"の処理
    }
    else if("yellow".equals(labStr)){
      // "yellow"の処理
    }
  }
}

・アクションコマンドの例

public void actionPerformed(ActionEvent e){
  String cmdName=e.getActionCommand();
  if("red".equals(cmdName)){
    // "red"の処理
  }
  else if("blue".equals(cmdName)){
    // "blue"の処理
  }
  else if("yellow".equals(cmdName)){
    // "yellow"の処理
  }
}

制約が無ければアクションコマンドでの処理が私は好きです。

これは色々やり方があります。
ボタンをメンバ変数として定義してActionEventの
getSource()メソッドでEventが発生したObjectと
比較するとか、getSource()で取得したオブジェクト
をButtonにキャストしてからgetLabel()でラベルの
文字列を取得し任意の文字列と比較するとか。
他にはアクションコマンドで分岐する方法もあります。

・メンバ変数の例

public class TestButton extends Applet implements ActionListener {
  Button btn1,btn2,bt3;
  public void init(){
    btn1=new Bu...続きを読む

Qデータ数をカウントしたいのですが

JAVAのJDBCを使いMySqlを操作しデータ数を取得するプログラムです。自分なりに考えたプログラムは
Connection con = null;
String sql = "select count(*) from テーブル名";

// コネクションを作成する。
con = DriverManager.getConnection(url, user, pass);
Statement st = con.createStatement();

// SQLを実行する。
ResultSet rs = st.executeQuery(sql);
String count = rs.getString("count(*)");

実行した結果上手く出来ないのですが、この部分での間違いはありますか?

Aベストアンサー

どう上手くいかないのかエラーメッセージなどがあると分かりやすいのですが・・・とりあえず、count(*)というカラム名は取得できなかったと思います。

sqlを
select count(*) as cnt from テーブル名
にして、

値を取得する部分を
String coung = rs.getString("cnt");
にしてみてください。
もしくはsqlはそのままで、
rs.getString(1)
で1番目のカラムが取得できます。
(カラム名が固定なら最初のやりかたの方が分かりやすいと思います。)

Qボタンクリック後パネルを再描画repaintしたい

ボタンをクリック後にstaticで保持していた値にプラス1して
その値をパネルに再描画したいと思っています。
下記のプログラムだとボタンをクリックすると
(<1<2<3<4)となって画像と数字が増えてしまいます
行いたいのは数字の部分だけが再描画されて
カウントされて<3と表示されるだけになってもらいたい


クラス1つ目

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Sample extends JFrame{
static int value=1;
JPanel work = new JPanel();
public static void main(String[] args) {
Sample frame = new Sample();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 200, 200, 100);
frame.add(frame.createPanel(), BorderLayout.LINE_END);
frame.setVisible(true);
}
public JPanel createPanel() {

ImageIcon icon = new ImageIcon("./img/left.gif");
JLabel label = new JLabel();
Cursor c = new Cursor(Cursor.HAND_CURSOR);
label.setCursor(c);
label.setIcon(icon);
JLabel strLabel = new JLabel();
String str = Integer.toString(value);
strLabel.setText(str);
work.add(label);
work.add(strLabel);
label.addMouseListener(new myListener());
return work;
}
class myListener extends MouseAdapter{
public void mouseClicked(MouseEvent e){
System.out.print(Sample.value++);
createPanel().repaint();
setVisible(true);
}
}
}


クラス2つ目
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MouseAdapter implements MouseListener{
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
}

ボタンをクリック後にstaticで保持していた値にプラス1して
その値をパネルに再描画したいと思っています。
下記のプログラムだとボタンをクリックすると
(<1<2<3<4)となって画像と数字が増えてしまいます
行いたいのは数字の部分だけが再描画されて
カウントされて<3と表示されるだけになってもらいたい


クラス1つ目

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing....続きを読む

Aベストアンサー

>class myListener extends MouseAdapter{
>createPanel().repaint();

createPanelでパネルを新規作成してrepaintしていますから、そういった動作になると思います。
labelをクラス変数として保持して、そこに設定するのが簡単だと思います。

Qフレーム上のコンポーネントの削除について

フレーム上の表示内容を切り替えるために、
それまでフレーム上にあったチョイス(choice)を
remove(choice1)メソッドで削除して、その場所に(その上に)画像(image)を表示したいと思うのですが、
チョイスは消えて表示されなくなるのですが、
チョイスのあったところだけ画像が表示されません。
チョイスの影響を消して、普通に画像を表示するにはどうしたらよいでしょうか。よろしくお願いします。

choice1.setLayout(null);
choice1.setBounds(500,300,100,20);
のように、nullレイアウトにしてあります。

Aベストアンサー

>remove(choice1)メソッドで削除
>チョイスは消えて表示されなくなる
>チョイスのあったところだけ画像が表示されません


「『チョイス』以外にそこにまだ
不要なごみコンポーネントが追加されてるから
(つまり削除してない「何か」があるから)」。

どのコンポーネントになにをどれだけ追加(add)したのか、
自分のソースコードを
再点検しましょう。

QJTableのイベント取得方法

お世話になります

JTableにDBからの検索結果を表示させて、そのセルを編集したときに編集したセルに対してアップデート等の処理を行いたいのですが、セルが編集されたときのイベントを取得したいのですがうまくいきません。
具体的なソース等のアドバイスよろしくお願いします。

---ソース---
TableEditListener lisner = new TableEditListener()
tableModel = new AbstractTableModel(vecResult,clmName);
tableModel.addTableModelListener(lisner);
table = new JTable(tableModel);

内部クラス

class TableEditListener implements javax.swing.event.TableModelListener{

 public TableEditListener(){
}
public void tableChanged(TableModelEvent e){
System.out.println("セルの編集をしました。");
}
}

現在以上のようなソースになっています。

よろしくお願いします。

お世話になります

JTableにDBからの検索結果を表示させて、そのセルを編集したときに編集したセルに対してアップデート等の処理を行いたいのですが、セルが編集されたときのイベントを取得したいのですがうまくいきません。
具体的なソース等のアドバイスよろしくお願いします。

---ソース---
TableEditListener lisner = new TableEditListener()
tableModel = new AbstractTableModel(vecResult,clmName);
tableModel.addTableModelListener(lisner);
table = new JTable(tableModel);

...続きを読む

Aベストアンサー

aotakatakaさんはJTable自身のイベントとCellEditorのイベントを混同して
しまっているのかもしれませんね。editingStoppedはCellEditorのイベントです。

/**
* 内部テーブルクラス
*/
class ETable extends JTable{
public ETable( TableModel tableModel ){
super( tableModel );

DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();
//0番目のカラムを取得する
TableColumn col0 = colModel.getColumn( 0 );
//0番目のカラムにMyCellEditorをセットする
col0.setCellEditor( new MyCellEditor( new JTextField() ) );

}
}

/**
* CellEditor
*/
class MyCellEditor extends DefaultCellEditor{
MyCellEditor( JTextField tf ){
super( tf );
setClickCountToStart( 1 );
//MyEditorListenerを追加
addCellEditorListener( new MyEditorListener() );
}
}

/**
* CellEditorListener
*/
class MyEditorListener implements CellEditorListener{
//セルの編集が終わった時
public void editingStopped( ChangeEvent e ){
}
public void editingCanceled( ChangeEvent e ){
}
}

>MyEditorListenerをどのようにJTableに組み込んでいいのかわからず困っています。

 MyEditorListenerをJTableに組み込むのではなく、MyEditorListener
 を追加したMyCellEditorをJTableに組み込むというのが正解です。

 CellEditorやここでは関係ありませんがCellRendererなどは覚えてしまうと
 非常に便利なクラスです。是非頑張ってください。
 また不明点がありましたら補足を下さい。

aotakatakaさんはJTable自身のイベントとCellEditorのイベントを混同して
しまっているのかもしれませんね。editingStoppedはCellEditorのイベントです。

/**
* 内部テーブルクラス
*/
class ETable extends JTable{
public ETable( TableModel tableModel ){
super( tableModel );

DefaultTableColumnModel colModel = (DefaultTableColumnModel)getColumnModel();
//0番目のカラムを取得する
TableColum...続きを読む

QSwing 編集不可でも選択可能なJTableセルの設定方法

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択ができなくなってしまうので、
 CellEditerを使用しています)

public class JTableCustom extends JTable {

public JTableCustom() {
super();
this.setModel(new DefaultTableModel());
this.setSize(300,200);
}

/**
* テーブルセルの編集ができないように設定します。<br>
*/
public void setEditFalse(){
JTextField tf = new JTextField("");
tf.setEditable(false);
DefaultCellEditor dce = new DefaultCellEditor(tf);
TableColumnModel tcm = this.getColumnModel();
for (int i = 0; i < tcm.getColumnCount(); i++){
tcm.getColumn(i).setCellEditor(dce);
}
}
}

JTableCostomインスタンス作成後、上記メソッドを呼び設定を行います。

上記メソッドにセルがへこまないように設定する方法、
もしくは別の方法で上記機能を満たすものがあれば教えていただきたいです。
よろしくお願い致します。

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択が...続きを読む

Aベストアンサー

編集を不可にするのなら、TableModel#isCellEditable(int rowIndex, int columnIndex)
を調整してください。

全てのセルを編集不可にするなら、DefaultTableModelのisCellEditable(int rowIndex, int columnIndex)を常にfalseを返すようにオーバーライドすればいいでしょう。

QTextAreaでの文字の色

こんばんわ。
皆様、ゴールデンウィークいかがお過ごしでしょうか?
さて、TextAreaもしくはJTextAreaで、一行づつ、文字の色を変えるにはどうしたらいいのでしょうか?
以前も、同じ内容の質問があったようですが、(http://oshiete1.goo.ne.jp/kotaeru.php3?q=22309)
読んでみたのですがStylepadというDEMOがどこにあるかわからず、解決できないのでよろしくお願いします。
解決できそうなサンプルのURLなど分かりましたら、回答していただければとてもたすかります。

import java.applet.*;
import java.awt.*;
import java.swing.*;

public class test extends JApplet
{
public void init()
{
Container con = getContentPane();
String str1 = "あいうえお\n";
String str2 = "かきくけこ\n";
JTextArea JT = new JTextArea();
con.add(JT);
JT.append(str1);
JT.append(str2);
}
}

これの"あいうえお"と"かきくけこ"を異なる色にしたいのですが、どうしたらいいのでしょう?

こんばんわ。
皆様、ゴールデンウィークいかがお過ごしでしょうか?
さて、TextAreaもしくはJTextAreaで、一行づつ、文字の色を変えるにはどうしたらいいのでしょうか?
以前も、同じ内容の質問があったようですが、(http://oshiete1.goo.ne.jp/kotaeru.php3?q=22309)
読んでみたのですがStylepadというDEMOがどこにあるかわからず、解決できないのでよろしくお願いします。
解決できそうなサンプルのURLなど分かりましたら、回答していただければとてもたすかります。

import java.applet.*;
import jav...続きを読む

Aベストアンサー

 こんにちは。

 JTextAreaはプレーンテキストを扱うコンポーネントなので、こういう場合はJEditorPaneかJTextPaneを使います。

 JEditorPaneはHTMLを扱うときに使うようなので、JTextPaneを使うのが適当のような気がします。

 サンプルを書くとこんな感じでしょうか。

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;

public class Test extends JFrame {
  JTextPane textPane;
  DefaultStyledDocument document;
  
  public static void main(String[] args) {
    Test frame = new Test();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
  }
  
  public Test() {
    document = new DefaultStyledDocument();
    textPane = new JTextPane(document);
        
    try {
      //属性情報を作成
      SimpleAttributeSet attribute = new SimpleAttributeSet();
      
      //属性情報の文字色に赤を設定
      attribute.addAttribute(StyleConstants.Foreground, Color.RED);

      //ドキュメントにその属性情報つきの文字列を挿入
      document.insertString(0, "あいうえお\n", attribute);
      
      //属性情報の文字色に青を設定
      attribute.addAttribute(StyleConstants.Foreground, Color.BLUE);

      //ドキュメントにその属性情報つきの文字列を挿入
      document.insertString(document.getLength(), "かきくけこ\n", attribute);
    }
    catch (BadLocationException ex) {
      ex.printStackTrace();
    }
    
    add(textPane, BorderLayout.CENTER);
  }
}

 なんか、いろいろややこしいのですが、参考URLのサイトがわかりやすかったので、ご覧ください。

参考URL:http://www.javadrive.jp/tutorial/appli/word/index1.html

 こんにちは。

 JTextAreaはプレーンテキストを扱うコンポーネントなので、こういう場合はJEditorPaneかJTextPaneを使います。

 JEditorPaneはHTMLを扱うときに使うようなので、JTextPaneを使うのが適当のような気がします。

 サンプルを書くとこんな感じでしょうか。

import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;

public class Test extends JFrame {
  JTextPane textPane;
  DefaultStyledDocument document;
  
  public static void main(String[...続きを読む


人気Q&Aランキング